package Risk.IHM;

import Risk.Moteur.Pays;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;

import java.util.Vector;

public class PaysIHM {
    private static final int	RAYON = 10;
    public boolean		clique;
    private Color		couleur, couleurTexte;
    private Pays		p;
    private Vector<Point>	pixels;
    private int			x, y;

    /**
     * constructeur du pays em mode graphique
     * @param p - le pays
     * @param pixels - le vecteur des pixels du pays
     * @param couleur - couleur de base du pays
     * @param x - coordonnee x du centre du pays
     * @param y - coordonnee y du centre du pays
     */
    public PaysIHM(Pays p, Vector<Point> pixels, Color couleur, int x, int y) {
	this.p       = p;
	this.x       = x;
	this.y       = y;
	this.pixels  = pixels;
	this.couleur = couleur;
	clique       = false;
	changerCouleurNbArmees();
    }

    /**
     * methode qui change la couleur du texte du nombre d'armees sur un pays
     * @param p - le pays sur lequel on applique le changement
     */
    public void changerCouleurNbArmees() {

	/* Ecriture en noir ou en blanc du nb d'armees */
	int	r = p.getJoueur().getCouleur().getRed();
	int	g = p.getJoueur().getCouleur().getGreen();
	int	b = p.getJoueur().getCouleur().getBlue();

	if (((r + g + b) / 3.0) > 122.5) {
	    couleurTexte = Color.BLACK;
	} else {
	    couleurTexte = Color.WHITE;
	}
    }

    /**
     * methode de dessin des possessions des joueurs
     * @param g
     * @param imgCarte
     */
    public void dessiner(Graphics g, ImageCarte imgCarte) {
	if (imgCarte.isAfficherPossessions()) {
	    for (int i = 0; i < pixels.size(); i++) {
		Point	pt = pixels.get(i);

		g.setColor(p.getJoueur().getCouleur());
		g.fillRect(pt.x, pt.y, 1, 1);
	    }
	}

	if (clique) {
	    for (int i = 0; i < pixels.size(); i++) {
		Point	pt = pixels.get(i);

		// ou autre couleur
		g.setColor(Color.gray);
		g.fillRect(pt.x, pt.y, 1, 1);
	    }
	} else {
	    g.setColor(Color.black);
	}

	g.fillOval(x - RAYON + 1, y - RAYON + 1, (RAYON + 1) * 2, (RAYON + 1) * 2);
	g.setColor(p.getJoueur().getCouleur());
	g.fillOval(x - RAYON, y - RAYON, RAYON * 2, RAYON * 2);
	g.setColor(Color.black);

	int	x1 = x - g.getFontMetrics().stringWidth("" + p.getNbArmee()) / 2;
	int	y1 = y + (g.getFontMetrics().getHeight()) / 3;

	// DEBUG
	// System.out.println("centre = ("+x+";"+y+") | string = ("+x1+";"+y1+")");
	changerCouleurNbArmees();
	g.setColor(couleurTexte);
	g.drawString("" + p.getNbArmee(), x1, y1);
    }

    /**
     *
     * @return
     */
    public Color getCouleur() {
	return couleur;
    }

    /**
     *
     * @return
     */
    public Color getCouleurTexte() {
	return couleurTexte;
    }

    public Pays getPays() {
	return p;
    }

    /**
     * @return the x
     */
    public int getX() {
	return x;
    }

    /**
     * @return the y
     */
    public int getY() {
	return y;
    }

    /**
     *
     * @param couleur
     */
    public void setCouleur(Color couleur) {
	this.couleur = couleur;
    }

    /**
     *
     * @param couleurTexte
     */
    public void setCouleurTexte(Color couleurTexte) {
	this.couleurTexte = couleurTexte;
    }

    /**
     * @param x the x to set
     */
    public void setX(int x) {
	this.x = x;
    }

    /**
     * @param y the y to set
     */
    public void setY(int y) {
	this.y = y;
    }
}
